[動画公開] Amazon Athena (Iceberg) x dbt ではじめるデータ分析! #ちょっぴりDD

[動画公開] Amazon Athena (Iceberg) x dbt ではじめるデータ分析! #ちょっぴりDD

Clock Icon2023.09.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部のコンサルティングチームの石川です。AWS主催のオンラインカンファレンス、ちょっぴり DiveDeep する AWS の時間にて「Amazon Athena (Iceberg) x dbt ではじめるデータ分析!」というテーマにて登壇しました。セッション動画資料が公開されました。

セッション概要

コンサルティングチームでは、Amazon RedshiftやSnowflakeと「dbt」を用いたサーバレスなデータプラットフォームである「dbt-template」ソリューションと、コンサルティングサービスをご提供しております。今回は、「dbt-template」のAmazon Athena対応で得られた技術調査の結果と、テーブルフォーマット「Iceberg」と「dbt」対応について、ちょっぴりDiveDeepしました。

前半は、2023/04にGAになった現在イチオシAmazon Athenaのテーブルフォーマット「Iceberg」のご紹介、後半はdbtをAmazon Athenaに対応させるアダプタ「dbt-athena」を紹介します。

セッション動画(約16分)

セッション資料

従来のデータレイクの技術課題

Iceberg、Hudi、Delta Lakeは、これらは技術課題に対して解決策を提供しています。

  • スモールファイルによるパフォーマンス劣化
    • OPTIMIZEによるデータのコンパクション
    • VACUUMによる不要なデータの削除
  • データの編集・削除が苦⼿
    • UPDATE、DELETE、MERGEのサポート
  • 同時アクセス時の整合性を担保できない
    • ACIDトランザクションのサポート
  • データが追加・更新されると過去の状態が復元できない
    • タイムトラベル機能による過去の時点のデータにアクセス

Amazon Athenaのテーブルフォーマット「Apache Iceberg」

  • Amazon Athena(Iceberg)は、ACIDにデータを更新(INSERT、UPDATE、DELETE、MERGE)、タイムトラベル、オプティマイズの操作を可能
  • UPSERT(DELETE/INSERT)やMERGEといった差分更新が可能になった
  • MERGE INTOはトランザクションであり、Athena エンジンバージョン 3 でのみサポート
  • Icebergは、Glueデータカタログによるオプティミスティックロック
  • Amazon Athena(Iceberg)は、パーティションをカラム単位ではなく、キー情報の一部分を用いてパーティションできる"Hidden Partition”
  • Apache HudiやDelta Lakeは、SELECTのみ(今後に期待)

dbt(data build tools)とは

  • データモデルSQLで構築、ビジネスロジックを実装
  • ビジネスロジックの依存関係からDAGを自動生成
  • DAGに基づいてデータ変換の並列で実行、データリネージ
  • データモデルに基づいたデータカタログ
  • コードベースのデータのテストを自動化
  • コードのバージョン管理によるCI/CD
  • マクロとref文により再利用可能なコード

なぜ、Amazon Athena(Iceberg) x dbt なのか?

  • Amazon Athenaは、スキーマオンリードなので、ソースデータのロードは不要、常にライブデータをクエリできる
  • Amazon Athenaは、パーティション化されたデータもPartition Projectionでよって直ちに読み込み可能
  • Amazon Athenaは、ストレージとコンピューティングが分離されており、dbtは実行時に生成したDAGによる並列実行と相性が良い

現状の課題と代替案

  • Icebergでは、サポートしていないデータ型が存在する
    • データ型を置き換えることで解決!
  • CTASでTIMESTAMP型がエラーになる
    • 不具合ではなく、現行の仕様(今後に期待)
    • string型などに変更による対処
  • dbtからIcebergのhidden partitionでtruncate()関数を使用するとエラーになる
    • Athenaからは問題なく使えるため、恐らくdbt-athenaアダプタ(Version 1.5.*)との不具合の可能性がある
    • dbtではなく、事前にテーブルを作成することで問題を回避できる

最後に

本日のテーマ「Amazon Athena (Iceberg) x dbt 」でした。Amazon Athena と Apache Icebergの組み合わせ、控えめに言って、最高です!最新のAmazon Athenaは、SQLベースでデータ変換を構築、オーケストレーションするためのフレームワークである、「dbt」の強みを生かしたデータ変換が可能になりました。

Amazon Athena(Iceberg)は、従来の技術課題を解決、dbtとの組み合わせにおいて、データカタログやデータリネージをサーバレスでご提供します。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.